package gob.osinerg.emergencia.action;

import gob.osinerg.emergencia.bean.ActividadBean;
import gob.osinerg.emergencia.bean.Emergencia;
import gob.osinerg.emergencia.bean.EmergenciaDetalle;
import gob.osinerg.emergencia.bean.FormularioEmergenciaUnmay;
import gob.osinerg.emergencia.bean.UnidadOperativaBean;
import gob.osinerg.emergencia.bean.UsuarioBean;
import gob.osinerg.emergencia.form.EmergenciaForm;
import gob.osinerg.emergencia.service.EmergenciaService;
import gob.osinerg.emergencia.service.GenericService;
import gob.osinerg.emergencia.util.Report;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.springframework.util.ResourceUtils;

public class EmergenciaAction extends GenericAction {

	private Log log = LogFactory.getLog(EmergenciaAction.class);

	private EmergenciaService service;
	private GenericService genericService;

	public ActionForward inicio(ActionMapping actionMapping,
			ActionForm actionForm, HttpServletRequest request,
			HttpServletResponse response) throws java.lang.Exception {

		EmergenciaForm form = (EmergenciaForm) actionForm;
		form.setCodigo(0);
		HttpSession session = request.getSession();
		UnidadOperativaBean unidadOperativa = (UnidadOperativaBean) session
					.getAttribute("UnidadOperativaBean");	
		System.out.println("Unidad Operativa: "+unidadOperativa.getCodigo());
		Emergencia beanAnio1 = new Emergencia();
		beanAnio1.setIdUnidadOperativa(Long.valueOf(unidadOperativa.getCodigo()));

		Emergencia beanAnio2 = new Emergencia();
		beanAnio2.setIdUnidadOperativa(Long.valueOf(unidadOperativa.getCodigo()));		
		
		form.getMapList().put("anioList",
				gob.osinerg.emergencia.util.Converter.getListaAnnos());
		
		form.setAnio1(beanAnio1);
		form.setAnio2(beanAnio2);
		
		return actionMapping.findForward("inicio");
	}

	public ActionForward doSave(ActionMapping actionMapping,
			ActionForm actionForm, HttpServletRequest request,
			HttpServletResponse response) throws java.lang.Exception {
		Date fechaActual = new Date();
		SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
		String cadenaFecha = formato.format(fechaActual);
		EmergenciaForm form = (EmergenciaForm) actionForm;
		FormularioEmergenciaUnmay beanform = new FormularioEmergenciaUnmay();
		String message = "messages.insert.successful";
		try {
			HttpSession session = request.getSession();
			UnidadOperativaBean unidadOperativa = (UnidadOperativaBean) session
					.getAttribute("UnidadOperativaBean");
			UsuarioBean usuario = (UsuarioBean) session
					.getAttribute("UsuarioBean");
			ActividadBean actividad=(ActividadBean)session.getAttribute("ActividadBean");
			Long idUnidadOperativa = Long.valueOf(unidadOperativa.getCodigo());
			System.out.println("Unidad Operativa2: "+idUnidadOperativa);
			int cod =form.getCodigo();
			cod++;
			form.setCodigo(cod);
			beanform.setFlag(cod);
			beanform.setUniopeId(idUnidadOperativa);
			beanform.setCdgoOsinerg(unidadOperativa.getCodigoOsinerg());
			beanform.setRegistroDgh(unidadOperativa.getCodigoDGH());
			beanform.setFrmlarioId(new Long(12));
			beanform.setTpoEmrgncia("EEM");
			beanform.setEstado("GE");
			beanform.setMdioInfrmtvo("SEM");
			beanform.setActiviId(new Long(actividad.getCodigo()));
			beanform.setStrFecha(cadenaFecha);
			beanform.setUsrioCrdor(usuario.getCodigoLogin());
			beanform.setFchaCrcion(new Date());
			
			Emergencia anio1 = (Emergencia) form.getAnio1();
			anio1.setIdUnidadOperativa(idUnidadOperativa);
			anio1.setUsrioCrdor(usuario.getCodigoLogin());
			anio1.setFchaCrcion(new Date());			

			Emergencia anio2 = (Emergencia) form.getAnio2();
			anio2.setIdUnidadOperativa(idUnidadOperativa);
			anio2.setUsrioCrdor(usuario.getCodigoLogin());
			anio2.setFchaCrcion(new Date());
			anio2.getDetalle().setDetalleEmrgOperativa(anio1.getDetalle().getDetalleEmrgOperativa());
			anio2.getDetalle().setDetalleOtros(anio1.getDetalle().getDetalleOtros());
			
			service.save(anio1, anio2, beanform);
			sendSuccessfulMessage(request, message);
		} catch (Exception ex) {
			log.error(ex.getMessage());
			ex.printStackTrace();
			message = "errors.update.failed.finalParam";
			sendErrorMessage(request, message, ex.getMessage());
		}

		return actionMapping.findForward("inicio");
	}
	
	public ActionForward doEnviar(ActionMapping actionMapping,
			ActionForm actionForm, HttpServletRequest request,
			HttpServletResponse response) throws java.lang.Exception {
		Date fechaActual = new Date();
		SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
		String cadenaFecha = formato.format(fechaActual);
		EmergenciaForm form = (EmergenciaForm) actionForm;
		FormularioEmergenciaUnmay beanform = new FormularioEmergenciaUnmay();
		String message = "messages.insert.successful";
		try {
			HttpSession session = request.getSession();
			UnidadOperativaBean unidadOperativa = (UnidadOperativaBean) session
					.getAttribute("UnidadOperativaBean");
			UsuarioBean usuario = (UsuarioBean) session
					.getAttribute("UsuarioBean");
			ActividadBean actividad=(ActividadBean)session.getAttribute("ActividadBean");
			Long idUnidadOperativa = Long.valueOf(unidadOperativa.getCodigo());
			System.out.println("Unidad Operativa3: "+idUnidadOperativa);
			form.setCodigo(-1);//para diferenciar en el form enviado
			beanform.setUniopeId(idUnidadOperativa);
			beanform.setCdgoOsinerg(unidadOperativa.getCodigoOsinerg());
			beanform.setRegistroDgh(unidadOperativa.getCodigoDGH());
			beanform.setFrmlarioId(new Long(12));
			beanform.setTpoEmrgncia("EEM");
			beanform.setEstado("GE");
			beanform.setMdioInfrmtvo("SEM");
			beanform.setActiviId(new Long(actividad.getCodigo()));
			beanform.setStrFecha(cadenaFecha);
			beanform.setUsrioCrdor(usuario.getCodigoLogin());
			beanform.setFchaCrcion(new Date());
			
			Emergencia anio1 = (Emergencia) form.getAnio1();
			anio1.setIdUnidadOperativa(idUnidadOperativa);
			anio1.setUsrioCrdor(usuario.getCodigoLogin());
			anio1.setFchaCrcion(new Date());			

			Emergencia anio2 = (Emergencia) form.getAnio2();
			anio2.setIdUnidadOperativa(idUnidadOperativa);
			anio2.setUsrioCrdor(usuario.getCodigoLogin());
			anio2.setFchaCrcion(new Date());
			anio2.getDetalle().setDetalleEmrgOperativa(anio1.getDetalle().getDetalleEmrgOperativa());
			anio2.getDetalle().setDetalleOtros(anio1.getDetalle().getDetalleOtros());
			
			service.save(anio1, anio2, beanform);
			sendSuccessfulMessage(request, message);
		} catch (Exception ex) {
			log.error(ex.getMessage());
			ex.printStackTrace();
			message = "errors.update.failed.finalParam";
			sendErrorMessage(request, message, ex.getMessage());
		}

		return actionMapping.findForward("inicio");
	}
	
    public ActionForward exportar(ActionMapping mapping, ActionForm actionForm,
            HttpServletRequest request, HttpServletResponse response) throws Exception {
    	
    	try{
            request.setAttribute("actionReport","ReporteEstadisticaEmergencia.do");
            
            HttpSession session = request.getSession();
    		UnidadOperativaBean unidadOperativa = (UnidadOperativaBean) session.getAttribute("UnidadOperativaBean");
    		Long idUnidadOperativa = Long.valueOf(unidadOperativa.getCodigo());       
    		String formatoReporte = request.getParameter("formatoReporte");
    		EmergenciaForm form = (EmergenciaForm) actionForm;
    		Emergencia anio1 = (Emergencia) form.getAnio1();
    		System.out.println("ID: " +anio1.getIdFormularioEmergencia());
    		
            Map parameters = new HashMap();
            parameters.put("FORM_ID", anio1.getIdFormularioEmergencia().toString());
            parameters.put("REGISTRO_DGH", unidadOperativa.getCodigoDGH());
            parameters.put("IMAGE_LOGO", request.getRequestURL().substring(0, request.getRequestURL().lastIndexOf("/"))+"/images/logo_home.jpg");

            File archivo = ResourceUtils.getFile("classpath:gob/osinerg/emergencia/resource/jrxml/ReporteEstadisticaEmergencia.jrxml");

            System.out.println("FORM_ID "+idUnidadOperativa.toString());
            System.out.println("REGISTRO_DGH "+unidadOperativa.getCodigoDGH());
    		Report report = new Report();
    		report.setJasperReport(archivo);
    		report.setParameter(parameters);
    		report.setConnection(genericService.getConnection());
    		
    		if(formatoReporte.equals("PDF")){
    			report.PDF(request, response);   		
    		}else{
            	response.setHeader("Content-Disposition", "inline; filename=ReporteEstadisticaEmergencia.do.xls");
            	report.XLS(request, response, Boolean.TRUE);      			
    		}  		
    	}catch(Exception ex){
    		log.error(ex.getMessage());
    	}
        return null;
    }
		
	public void setGenericService(GenericService genericService) {
		this.genericService = genericService;
	}

	public void setService(EmergenciaService service) {
		this.service = service;
	}

}
